REM >Director:Menus.ModulesSWI

REM Displays all modules SWIs in both numeric and name format

REM 1.00 13/11/95 R.Thickings Started
REM 1.10 23/02/02 P.Ludlam    Fixed interaction with PrintQFS

ON ERROR: ON ERROR OFF: ERROR ERR,REPORT$+" at "+STR$ ERL
SYS "OS_GetEnv" TO in$
title$=FNarg(in$,"-do","")

Menu%=FNswi_number("Director_Menu")
Option%=FNswi_number("Director_Option")
Command%=FNswi_number("Director_Command")
Dash%=FNswi_number("Director_Dash")
EndMenu%=FNswi_number("Director_EndMenu")
XOS_Module%=FNswi_number("XOS_Module")

menu$=title$+" SWIs"

OSCLI "*Set Director$Menu ModulesSWI"
SYS Menu%,""""+menu$+""" <Director$Menu> -temp"

SYS XOS_Module%,18,title$ TO ,,,base%,,;flag%
IF (flag% AND 1) THEN END

start%=base%+base%!&24
IF !start%=0 THEN
  swi%=base%!&1C
  SYS Option%,"""(no named SWIs)"""
  SYS Option%,"""(SWI base &"+STR$~(swi%)+")"""
ELSE
  swiname$=FN0(start%)
  start%+=LEN swiname$+1
  WHILE ?start%<>0 AND start%<>0
    swi%=base%!&1C
    name$=FN0(start%)
    start%+=LEN name$+1
    name$=swiname$+"_"+name$
    name$=STR$~(FNswi_number(name$))+" "+name$
    IF (flags% AND 1)=1 THEN
      start%=0
      SYS Option%,"""(no named SWIs)"""
      SYS Option%,"""(SWI base &"+STR$~(swi%)+")"""
    ELSE
      SYS Option%,"""&"+name$+""""
    ENDIF
  ENDWHILE
ENDIF

SYS EndMenu%

END

DEF FNarg(str$,arg$,def$)
LOCAL i,j
i=INSTR(str$,arg$)
IF i=0 THEN =def$
i+=LEN arg$+1
j=INSTR(str$+" <"," ",i)
=MID$(str$,i,j-i)

DEF FNswi_number(name$)
  SYS "XOS_SWINumberFromString",,name$ TO A%;flags%
=A%

DEF FN0(a%)
LOCAL m%:m%=255
s$=""
WHILE (?a%>=32 OR ?a%=9) AND m%<>0
 s$+=CHR$?a%
 a%+=1:m%-=1
ENDWHILE
=s$
